<template>
  <div id="app">
    <div class="container">
      <!-- 顶部框模块 -->
      <div class="form-group">
        <div class="input-group">
          <h4>品牌管理</h4>
        </div>
      </div>

      <!-- 数据表格 -->
      <table class="table table-bordered table-hover mt-2">
        <thead>
          <tr>
            <th>编号</th>
            <th>资产名称</th>
            <th>价格</th>
            <th>创建时间</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody >
          <!-- 需求1：将下方data()函数中返回的list数据渲染至tbody -->
          <!-- 1.1  找到tbody,通过v-for将数据渲染到tr中 -->
          <!-- 1.2  设置显示价格的td样式：价格大于100,字体为红;否则不变色 -->

          <!-- 需求2：实现点击新增功能 -->
          <!-- 2.1  给点击按钮绑定点击事件 -->
            <!-- 2.1.1  阻止表单默认行为(.prevent修饰符) -->
          <!-- 2.2  非空校验 -->
          <!-- 2.3  给资产名称和价格进行双向绑定 -->
          <!-- 2.4  将用户输入的内容转为对象添加至list末尾 -->

          <!-- 需求3：实现删除功能(通过id来删除数据) -->
          <!-- 3.1  给删除按钮添加点击事件,阻止默认行为 -->
          <!-- 3.2  绑定事件时,将该条数据的id传参到事件处理函数中(动态新增) -->
          <!-- 3.3  事件处理函数中,通过传递的id来获取list的索引(forEach中第二个参数为索引) -->
          <!-- 3.4  通过索引来删除该条数据 -->
          <!-- 3.5  当删完数据时,tfoot需要显示(v-if="") -->
          <!-- 3.6  重新添加时,由于list没有数据,所以新增数据id会报错(undefined),需要在前面设置id是增加默认值-->

          <!-- 需求4：格式化日期 -->
          <!-- 4.1  下载三方包moment来进行格式化 -->
          <!-- 4.2  在main.js中引入moment包：js文件需要使用变量接收 -->
          <!-- 4.3  在methods中定义一个formateDate函数来格式化日期 -->
          <!-- 4.4  将需要格式化的日期对象作为参数传入formateDate-->
          <!-- 4.5  在formateDate函数体中调用moment三方包的功能 -->
              <!-- 注意 4.5.1：moment三方包在哪里使用就在哪里引入 -->
              <!-- 4.5.2：将moment调用format方法后的处理结果返回出去('YYYY-MM-DD HH:mm:ss') -->

          <!-- 需求5：求商品总价和均价 -->
          <!-- 5.1  给tbody末尾添加静态tr结构(单元格合并) -->
          <!-- 5.2  在computed中定义两个计算属性totalPrice和avgPrice(商品总价和均价) -->
          <!-- 5.3  在上面写好的静态tr中使用插值表达式调用两个计算属性(不用括号调用) -->
          <!-- 5.4  在函数体中求商品总价：计算属性和data一样里面的成员可直接被this引用 -->
          <tr v-for="item in list" :key="item.id">
            <td> {{item.id}} </td>
            <td>  {{item.name}}  </td>

            <!-- 如果价格超过100，就有red这个类 -->
            <td  :class="{red:item.price>100}">  {{item.price}}  </td>
            <td>  {{formatDate(item.time)}}  </td>
            <td><a href="#" @click.prevent = "del(item.id)" >删除</a></td>
          </tr>

          <tr style="background-color: #EEE">
            <td>统计:</td>
            <td colspan="2">总价钱为: {{ totalPrice }}</td>
            <td colspan="2">平均价: {{ avgPrice }}</td>
          </tr>
        </tbody>
          <!-- 当tbody中没有数据(list.length为0)时显示 -->
        <tfoot v-if="list.length==0">
          <tr>
            <td colspan="5" style="text-align: center">暂无数据</td>
          </tr>
        </tfoot>
           
      </table>

      <!-- 添加资产 -->
      <form class="form-inline">
        <div class="form-group">
          <div class="input-group">
            <input
              type="text"
              class="form-control"
              placeholder="资产名称"
              v-model.trim.lazy="name"
            />
          </div>
        </div>
        &nbsp;&nbsp;&nbsp;&nbsp;
        <div class="form-group">
          <div class="input-group">
            <input
              type="text"
              class="form-control"
              placeholder="价格"
              v-model.number.trim.lazy="price"
            />
          </div>
        </div>
        &nbsp;&nbsp;&nbsp;&nbsp;
        <!-- 阻止表单提交 -->
        <button  @click.prevent="add" class="btn btn-primary">添加资产</button>
      </form>
    </div>
  </div>
</template>

<script>
// 三方包在哪里使用就在哪里引入
import moment from 'moment'
export default {
  data() {
    return {
      name: "", // 名称
      price: 0, // 价格
      list: [
        { id: 100, name: "外套", price: 199, time: new Date('2010-08-12')},
        { id: 101, name: "裤子", price: 34, time: new Date('2013-09-01') },
        { id: 102, name: "鞋", price: 25.4, time: new Date('2018-11-22') },
        { id: 103, name: "头发", price: 19900, time: new Date('2020-12-12') }
      ],
    };
  },
  methods:{
    add(){
      // 
      if(this.name.length===0||this.price.length===0){
        return alert('资产名称和价格不能为空')
      }
      // 将用户数据转为对象添加至list
      this.list.push({
        // 
        id:this.list.length>0?this.list[this.list.length-1].id+1:100,
        name:this.name,
        price:this.price,
        time:new Date()
      })

      // 添加完成,清空
      this.name='',
      this.price=0
    },
    del(id){
      this.list.forEach((item,index)=>{
        if(item.id==id){
          this.list.splice(index,1)
        }
      })
    },
    // 定义formatDate函数
    formatDate(date){
      return moment(date).format('YYYY-MM-DD HH:mm:ss')
    }
  },
  computed:{
    totalPrice(){
      let sum = 0
      this.list.forEach(item=>sum+=item.price)
      return sum.toFixed(2) 
    },
    avgPrice(){
      if(this.list.length===0) return 0
      return (this.totalPrice / this.list.length).toFixed(2)
    }
  }
}
</script>

<style >
.red{
  color: red;
}
</style>